#pragma once

#include "AsyncLibDef.h"

namespace AsyncLib
{

class CThreadpoolTimer
{
public:
	CThreadpoolTimer();
	~CThreadpoolTimer();

	void Init();
	void Stop();
	void Exit();
	void AddTask(UINT nMilliseconds, std::function<void()>&& fnTask);

private:
	void OnCallback(PTP_TIMER pTpTimer);
	PTP_TIMER GetTpTimer();
	void ReleaseTpTimer(PTP_TIMER pTpTimer);

	PTP_TIMER  m_pTpCaches[4];
	std::mutex m_mutex;
	std::unordered_map<PTP_TIMER, std::function<void()>> m_mapTasks;
};

} // namespace AsyncLib
